package com.iwhalecloud.bss.kite.cucc.service.attr.linkhandler;

import com.iwhalecloud.bss.kite.common.util.KiteBeanUtils;
import com.iwhalecloud.bss.kite.common.util.KiteObjectUtils;
import com.iwhalecloud.bss.kite.common.util.KiteStringUtils;
import com.iwhalecloud.bss.kite.cucc.service.attr.LocalAttrCalcFeeUtil;
import com.iwhalecloud.bss.kite.cucc.service.attr.LocalAttrHelper;
import com.iwhalecloud.bss.kite.cucc.service.attr.handler.EnterpriseSelfPurchaseAttrHandler;
import com.iwhalecloud.bss.kite.cucc.service.util.ProdCateUtil;
import com.iwhalecloud.bss.kite.dataservice.cache.AttrValueCache;
import com.iwhalecloud.bss.kite.dataservice.entity.AttrValue;
import com.iwhalecloud.bss.kite.listener.handler.attr.annotation.AttrHandler;
import com.iwhalecloud.bss.kite.listener.handler.attr.impl.AbstractAttrLinkageHandler;
import com.iwhalecloud.bss.kite.manager.enums.ActionType;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttr;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttrValue;
import com.iwhalecloud.bss.kite.manager.inst.KiteInst;
import com.iwhalecloud.bss.kite.service.attr.AttrData;
import com.iwhalecloud.bss.kite.service.scene.attr.OperateInstAttrService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * 企业自采属性联动处理类 field_name:200003676
 */
@Service
@AttrHandler(EnterpriseSelfPurchaseAttrHandler.class)
public class EnterpriseSelfPurchaseAttrLinkHandler extends AbstractAttrLinkageHandler<AttrData> {

    @Autowired
    private OperateInstAttrService operateInstAttrService;

    @Override
    public void handle(KiteAttr attr, KiteInst inst, AttrData data) {
        //SIM卡类型
        KiteAttr simCardTypeAttr = inst.getAttr("200003678");
        if (Objects.isNull(simCardTypeAttr)) {
            return;
        }
        if (KiteStringUtils.equalsAny(inst.getSpecId(), ProdCateUtil.getMainMemberProdIdForArr(ProdCateUtil.GIFT_DZ4G_PROD, ProdCateUtil.GIFT_DZCAT1_PROD,
            ProdCateUtil.GIFT_TYCAT1_PROD, ProdCateUtil.GIFT_DZ5G_PROD))) {
            List<AttrValue> attrs = AttrValueCache.get(simCardTypeAttr.getAttrId());
            if (KiteStringUtils.equals("1_0000107", attr.getValue())) {
                /**
                 * 企业自采为【否】，SIM卡类型下拉框值展示： 消费电子级物联网成品卡（二合一） 消费电子级物联网成品卡（三合一） 工业级物联网贴片成品卡 工业级物联网成品卡（普通） 工业级物联网成品卡（微型）
                 * 工业级物联网成品卡（微型2） 消费电子级物联网成品卡（普通） 消费电子级物联网贴片成品卡 车规级物联网贴片成品卡 工业级物联网成品卡_普通_捷德 工业级物联网贴片成品卡_捷德 eSIM卡 eSIM电子卡
                 */
                simCardTypeAttr.setAttrValues(KiteBeanUtils.copyPropsForList(attrs, KiteAttrValue.class));
            }
            else {
                /**
                 * 企业自采为【是】:工业级物联网贴片成品卡 消费电子级物联网贴片成品卡 车规级物联网贴片成品卡 工业级物联网贴片成品卡_捷德 eSIM卡
                 */
                List<AttrValue> filterAttrs = attrs.stream().filter(attr1 -> KiteStringUtils.equalsAny(attr1.getAttrValue(), "100006407", "100006412",
                    "100006413", "100006415", "100007000")).collect(Collectors.toList());
                simCardTypeAttr.setAttrValues(KiteBeanUtils.copyPropsForList(filterAttrs, KiteAttrValue.class));
                operateInstAttrService.setAttrValue(inst, simCardTypeAttr.getFieldName(), "100006407", data.getSceneInstId(), null);
            }
        }

        // 4G定制连接产品-Cat.1
        if (KiteStringUtils.equalsAny(inst.getSpecId(),ProdCateUtil.getMainMemberProdIdForArr(ProdCateUtil.GIFT_DZCAT1_PROD, ProdCateUtil.GIFT_TYCAT1_PROD, ProdCateUtil.GIFT_DZ5G_PROD))) {
            // 卡商：企业自采为【是】展示
            if ("1_0000106".equals(attr.getValue())) {
                LocalAttrHelper.showAndNotNull(inst, "200004040");
            }
            else if(!"100007000".equals(simCardTypeAttr.getValue())) {
                LocalAttrHelper.hideAndNullable(inst, "200004040");
            }
        }
        else {
            //企业自采为【否】,且SIM卡类型为【eSIM卡】的时候,卡商要展示
            if ("1_0000107".equals(attr.getValue()) && "100007000".equals(simCardTypeAttr.getValue())) {
                LocalAttrHelper.showAndNonnull(inst, "200004040");
            }
        }

        // 企业自采为【是】卡号数据服务费(元/张)要展示
        if (KiteStringUtils.equalsAny(inst.getSpecId(),ProdCateUtil.getMainMemberProdId(ProdCateUtil.GIFT_TYCAT1_PROD))) {
            if ("1_0000106".equals(attr.getValue())) {
                LocalAttrHelper.showAndNotNull(inst, "200003679");
            } else {
                LocalAttrHelper.hideAndNullable(inst, "200003679");
            }
        }

        if ("1_0000107".equals(attr.getValue())) {
            //卡号数据服务费
            KiteAttr cardFeeAttr = inst.getAttr("200003679");
            if (Objects.nonNull(cardFeeAttr)) {
                String simCardFee;
                if (KiteStringUtils.equalsAny(attr.getValue(), "100007000", "100007001")) {
                    //eSim卡类型
                    double eSimCardFeeDoubleValue = LocalAttrCalcFeeUtil.calcESimCardFee(inst);
                    simCardFee = String.valueOf(eSimCardFeeDoubleValue);
                }
                else {
                    //普通卡类型
                    simCardFee = LocalAttrCalcFeeUtil.calcNormalSimCardFee(inst);
                }

                if (KiteStringUtils.isEmpty(simCardFee) || "0.0".equals(simCardFee)) {
                    cardFeeAttr.setValue("0");
                    cardFeeAttr.setValueDesc("0");
                }
                else {
                    cardFeeAttr.setValue(simCardFee);
                    cardFeeAttr.setValueDesc(simCardFee);
                }
            }
        }

        //企业自采为【是】,卡号数据服务费(元/张)默认值为0
        if ("1_0000106".equals(attr.getValue()) && inst.getActionType().equals(ActionType.A)) {
            KiteAttr cardNumAttr = inst.getAttr("200003679"); //卡号数据服务费(元/张)
            if (!KiteObjectUtils.isEmpty(cardNumAttr)) {
                operateInstAttrService.setAttrValue(inst, "200003679", "0", data.getSceneInstId(), null);
            }
        }
    }

    @Override
    public void handleStyle(KiteAttr attr, KiteInst inst, AttrData data) {

    }
}
